import java.util.Scanner;
import java.io.*;
import java.io.File;

public class testclass
{
	public static void main(String[] args)
	{
		Geschaeftsstelle gs6 = new Geschaeftsstelle();
		load(gs6);
		print(gs6);
	}
	

		
	public static void print(Geschaeftsstelle gs6)
	{
		
		int choice = -1;
		
		while(choice != 0)
		{
			Scanner eingabe = new Scanner(System.in);
			try{	
				System.out.println("---------------------------------");
				System.out.println("1) Neuen Mitarbeiter erfassen");
				if(gs6.getMitarbeiter(0) != null)
				{
					System.out.println("2) List Mitarbeiter");
					System.out.println("3) Neuen Vertrag erfassen");
					System.out.println("4) Vertrag bearbeiten");
					System.out.println("5) List Ziele");
					System.out.println("6) List Vertraege");
					System.out.println("7) Ziele bearbeiten/definieren/erfassen");
					System.out.println("9) Load Stock");
					System.out.println("0) Exit");
							System.out.println("---------------------------------");
					choice = eingabe.nextInt();
					switch (choice){
						case 1: addMitarbeiter(gs6);break;
						case 2: listMitarbeiter(gs6);break;
						case 3: addVertrag(gs6);break;
						case 4: editVertrag(gs6);break;
						case 5: listZiele(gs6);break;
						case 6: listVertraege(gs6);break;
						case 7: printZieleMenu(gs6);break;
						case 9: load(gs6);break;
						case 0: exit(gs6);break;
						default: System.out.println("Wrong choice!");
					}
				}		
				else
				{
					System.out.println("8) Load");
					System.out.println("0) Exit");
					choice = eingabe.nextInt();
					switch (choice){
						case 1: addMitarbeiter(gs6);break;
						case 8: load(gs6);break;
						case 0: exit(gs6);break;
						default: System.out.println("Wrong choice!");
					}
				}
			
			}catch(Exception ex){
		System.out.println("Input mismatch!");
			}
		}
	}
	
	public static void printZieleMenu(Geschaeftsstelle gs)
	{
		Scanner eingabe = new Scanner(System.in);
		// System.out.println("2) Neue Zielerreichung erfassen");
		System.out.println("---------------------------------");
		System.out.println("1) Neues Ziel erfassen");
		System.out.println("2) Neues Ziel definieren");
		System.out.println("3) Ziel bearbeiten");
		System.out.println("0) zurueck");
		System.out.println("---------------------------------");
		int choice = eingabe.nextInt();
		// choice = eingabe.nextInt();
		switch (choice){
			case 1: addZiel(gs);break;
			case 2: defineZiel(gs);break;
			// case 2: addZielerreichung(gs6);break;
			case 3: editZiel(gs);break;
			case 0: print(gs);break;
			default: System.out.println("Wrong choice!");
		}
	}
		
	public static void editZiel(Geschaeftsstelle gs)
	{
		Scanner eingabe = new Scanner(System.in);
		
		gs.listZielerreichung();
		int choice1 = eingabe.nextInt();
		System.out.println("\nWelches Ziel soll überarbeitet werden?\n\n");
		gs.getZielerreichung(choice1).listZiele();
		int choice2 = eingabe.nextInt();
		System.out.println("Provisionsziel:\n");
		double soll = eingabe.nextDouble();
		gs.getZielerreichung(choice1).getZiele(choice2).setSoll(soll);
		System.out.print("Punkteziel:\n");
		soll = eingabe.nextDouble();
		gs.getZielerreichung(choice1).getZiele(choice2).setSollP(soll);
	}
	
	public static void editVertrag(Geschaeftsstelle gs)
	{
		Scanner eingabe = new Scanner(System.in);
		listZielerreichung(gs);
		int choiceZE = eingabe.nextInt();
		gs.getZielerreichung(choiceZE).listZiele();
		int choiceZiele = eingabe.nextInt();
		gs.getZielerreichung(choiceZE).getZiele(choiceZiele).listVertraege();
		int choiceVer = eingabe.nextInt();
		gs.getZielerreichung(choiceZE).getZiele(choiceZiele).editVertrag(choiceVer-1);
	}
				
	public static void addMitarbeiter(Geschaeftsstelle gs)
	{
		// addZielerreichung(gs,gs.addMitarbeiter());
		gs.addZielerreichung(new Zielerreichung(gs,gs.getMitarbeiter(gs.addMitarbeiter())));
	}
	
	public static void addZiel(Geschaeftsstelle gs)
	{
		Scanner eingabe = new Scanner(System.in);
		gs.listZielerreichung();
		int choice = eingabe.nextInt();
		gs.getZielerreichung(choice).listAlleZiele();
		int j = eingabe.nextInt();
		// String name = eingabe.next();
		System.out.print("\nProvisionsziel: ");
		double soll = eingabe.nextDouble();
		double haben = 0;
		System.out.print("\nPunkteziel: ");
		double sollp = eingabe.nextDouble();
		gs.getZielerreichung(choice).addZiel(gs.getZielerreichung(choice).getOneOfAlleZiele(j), soll, haben, sollp);
		gs.getZielerreichung(choice).deleteZiel(gs.getZielerreichung(choice).getOneOfAlleZiele(j));

	}
	
	public static void exit(final Geschaeftsstelle gs)
	{
		
		// System.out.println("Welche Zielerreichung wollen Sie speichern?");
		 
		Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() 
		{
			public void run() 
			{
				save(gs);
			}
		}
		));
    }
	
	public static void save(Geschaeftsstelle gs)
	{
		
		File f = new File("Zielerreichung/ziel.vr");	
		File f2 = new File("Zielerreichung/zieltemp.vr");	
		try {
		FileOutputStream fileStream = new FileOutputStream(f);
		ObjectOutputStream os = new ObjectOutputStream(fileStream);
		
		
		
		// int i=0,j=0;
		// Ziel[] ziele;
		Scanner eingabe = new Scanner(System.in);
		// listZielerreichung(gs);
		// int choice = eingabe.nextInt();
		
		os.writeInt(gs.getCountZielerreichung());
		int count = gs.getCountZielerreichung();
		System.out.println(count + " Zielerreichungen");
		int i=0;
		for(i=0;i<count;i++)
		{
			os.writeObject(gs.getZielerreichung(i));
		}
		// os.writeObject(gs.getMitarbeiter(choice));
		System.out.println("saved");
						
		f2.delete();
		os.close();
		}
		 catch (Exception ex) {
		 ex.printStackTrace();
		 }
		
		
	}
	
	public static void load(Geschaeftsstelle gs)
	{
		File f = new File("Zielerreichung/ziel.vr");
		File f2 = new File("Zielerreichung/zieltemp.vr");
		
		try{
			// try{
		FileInputStream fileStream = new FileInputStream(f);
		ObjectInputStream os = new ObjectInputStream(fileStream);
		
		// Object input = os.readObject();
		// listZielerreichung(gs);
		// int choice = eingabe.nextInt();
		int i=0;
		while(gs.getZielerreichung(i) != null)
		{
			i++;
		}
		
		int count = os.readInt();
		
		int j;
		
		for(j=0;j<count;j++)
		{
			gs.addZielerreichung((Zielerreichung) os.readObject());
			// System.out.println(gs.getZielerreichung(0).getMitarbeiter().getName());
			// gs.addMitarbeiter(gs.getZielerreichung(0).getMitarbeiter().getName(), gs.getZielerreichung(0).getMitarbeiter().getSurname());
			gs.addMitarbeiter(gs.getZielerreichung(i).getMitarbeiter()	);
			// defineZielStartup(gs,j,count);
			i++;
		}
		
		
		 os.close();
			// }catch (Exception FileNotFoundException){
			// System.out.println("Keine Datei zum Laden gefunden!");
			// }
		 }catch (Exception FileNotFoundException) {
		 // ex.printStackTrace();
		 // System.out.println("Bereits geladen, oder File nicht vorhanden!");
		 }
		 
		 f.renameTo(f2);
		 // f.delete();
			
	}
	
	public static void defineZielStartup(Geschaeftsstelle gs, int choice)
	{
			try{
				String tmp;
				// Scanner eingabe = new Scanner(System.in);
				File file = new File("Zielerreichung/ziele.txt");
				FileReader reader = new FileReader(file);
				BufferedReader br = new BufferedReader(reader);
				// int choice = eingabe.nextInt();
					while((tmp = br.readLine()) != null)
							{
								// gs.getZielerreichung(i).defineZiel(tmp);
								gs.getZielerreichung(choice).defineZiel(tmp);
							}
					
					
			}catch(Exception ex) 
				{
					ex.printStackTrace();
				}
		}
	
	public static void defineZielStartup(Geschaeftsstelle gs,int choice, int count)
	{				
		try{
			String tmp;
			File file = new File("Zielerreichung/ziele.txt");
			FileReader reader = new FileReader(file);
			BufferedReader br = new BufferedReader(reader);
			int i=0;
			while(i<count)
				{
					while((tmp = br.readLine()) != null)
					{
						gs.getZielerreichung(choice).defineZiel(tmp);
					}
				i++;
				}
				
		}catch(Exception ex) 
			{
				ex.printStackTrace();
			}
	}
	
	public static void defineZiel(Geschaeftsstelle gs)
	{
		try{
			Scanner eingabe = new Scanner(System.in);
			
				gs.listZielerreichung();
				int choice = eingabe.nextInt();

				// System.out.println("ZIel:"+gs.getZielerreichung(choice));
				// System.out.println("ZIel:"+gs.getZielerreichung(choice).getZiel(0));
				if(gs.getZielerreichung(choice).getZiel(0) == null)
				{
					defineZielStartup(gs, choice);
				}
				else
				{
					gs.getZielerreichung(choice).listAlleZiele();
					System.out.println("neues Ziel anlegen?(Y/N)");
					String input = eingabe.next();
					if(input.equals("Y") || input.equals("y"))
						gs.getZielerreichung(choice).defineZiel();
					else;
				}
		}catch(Exception ex) {
		 ex.printStackTrace();
		 }
	}
	
	public static void listMitarbeiter(Geschaeftsstelle gs)
	{
		gs.listMitarbeiter();
	}
	
	public static void listZielerreichung(Geschaeftsstelle gs)
	{
		gs.listZielerreichung();
	}
	
	public static void listZiele(Geschaeftsstelle gs)
	{
		Scanner eingabe = new Scanner(System.in);
		listZielerreichung(gs);
		int choice = eingabe.nextInt();
		gs.getZielerreichung(choice).listZiele();
	}
	
	public static void addVertrag(Geschaeftsstelle gs)
	{
		Scanner eingabe = new Scanner(System.in);
		// gs6.getZielerreichung(0).getZiele().addVertrag();
		listZielerreichung(gs);
		int choice = eingabe.nextInt();
		gs.getZielerreichung(choice).getZiele().addVertrag();
	}
	
	public static void listVertraege(Geschaeftsstelle gs)
	{
		Scanner eingabe = new Scanner(System.in);
		listZielerreichung(gs);
		int choice = eingabe.nextInt();
		gs.getZielerreichung(choice).getZiele().listVertraege();
	}

	
}		